iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

JavaScript基礎30天系列 第 19

JS ES6 基礎介紹 DAY19

  • 分享至 

  • xImage
  •  

今天要來介紹 JS ES6 的 let 與 const
由於我們再撰寫程式碼的時候
要避免汙染全域變數
這裡先舉一個例子
CodePen
若在console裡面打 window 會發現裡面會有一個我們所宣告的全域變數(a)
https://ithelp.ithome.com.tw/upload/images/20201004/20123039afKafv5nAg.png
這代表 當我們使用 var 宣告變數的時候
window此物件 都會記錄這些變數
若有很多開發者
就有可能汙染在window物件的全域變數
所以 let const 就可以解決此問題!!


let 與 const 皆是用來宣告區塊裡的變數
區塊: {}
CodePen
https://ithelp.ithome.com.tw/upload/images/20201004/20123039zn5cCYidui.jpg
會發現此時 window物件 找不到 a
是因為我們使用 let 將變數限制在{}內
所以用let宣告的變數變數也只會存活在{}內

我們再看一個例子
https://ithelp.ithome.com.tw/upload/images/20201004/20123039oyXjYCCfCS.jpg
CodePen
會發現 函式裡面的a 並部會影響到全域變數的a
是不是很神奇!!


let + for
在還沒介紹 let + for 之前
我們先前的 for 都是使用 var 來搭配
CodePen
會發現 i 在window物件會呈現3
但若不想汙染到全域變數
可以改成let
https://ithelp.ithome.com.tw/upload/images/20201004/20123039Ikn5PwxgHa.jpg
CodePen
這時window物件 會找不到 i 值
因為上面有提到
let的生命週期只會存活在 {} 內

我們再看一個例子
CodePen
這裡的目標是 點li 並呈現 li的數字
但會發現,不管怎麼點
永遠都是4 /images/emoticon/emoticon03.gif
是因為 i 這個全域變數被汙染到
解決方法一樣是改成let來宣告
CodePen


const

const 就是唯讀變數 我們不能去修改
https://ithelp.ithome.com.tw/upload/images/20201004/20123039ntqdqBxl7U.jpg
CodePen
這裡會發現我們不能對 a 去做修改
因為我們是利用 const 來宣告變數a

但若利用 const宣告陣列 物件呢
這裡非常有趣!!/images/emoticon/emoticon07.gif
https://ithelp.ithome.com.tw/upload/images/20201004/20123039tlS7b8zZBk.jpg
會發現我們已經用 const 了
為什麼還能修改值呢!!!
這裡是有關 物件 陣列傳參考的特性(若有興趣,可以關注接下來的JS核心技術文章)
那要怎麼解決呢??
這裡提供一個方法
Object.freeze(變數);
https://ithelp.ithome.com.tw/upload/images/20201004/20123039CgTIaim5fo.jpg
CodePen
這樣就沒辦法修改啦~~~


let、const 注意事項
1.
在我們介紹 var變數的時候
有提到 var 會有 hoisting(提升)
https://ithelp.ithome.com.tw/upload/images/20201004/20123039RNZWtgfrit.jpg
CodePen

但 let 與 const 特性跟 var 不一樣
https://ithelp.ithome.com.tw/upload/images/20201004/20123039mnoLflDpoE.jpg
CodePen

  1. 同個區塊上不能重複命名
    https://ithelp.ithome.com.tw/upload/images/20201004/201230393GSVqisCPk.jpg
    CodePen

那今天的 let 與 const 就介紹到這裡
明天我們將會介紹 ES6 的 Template literals
敬請期待囉!!


上一篇
AJAX 基礎介紹(3) DAY18
下一篇
JS ES6 Template literals 基礎介紹 DAY20
系列文
JavaScript基礎30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言